themingengine: Draw "icon-shadow" on icons
authorBenjamin Otte <otte@redhat.com>
Mon, 12 May 2014 01:16:07 +0000 (03:16 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 14 May 2014 02:28:35 +0000 (04:28 +0200)
gtk/gtkcssshadowsvalue.c
gtk/gtkcssshadowsvalueprivate.h
gtk/gtkthemingengine.c

index eb32471cec0345349f09f8875aa66c5e5c5b4ba1..6ff7ef03207f46ae294ac43019eb6abfa0972ecd 100644 (file)
@@ -241,6 +241,14 @@ _gtk_css_shadows_value_parse (GtkCssParser *parser)
   return result;
 }
 
+gboolean
+_gtk_css_shadows_value_is_none (const GtkCssValue *shadows)
+{
+  g_return_val_if_fail (shadows->class == &GTK_CSS_VALUE_SHADOWS, TRUE);
+
+  return shadows->len == 0;
+}
+
 void
 _gtk_css_shadows_value_paint_layout (const GtkCssValue *shadows,
                                      cairo_t           *cr,
index 2b227bd5a85ef7215b8aa985c75fcf28eb3d8638..5f2bdbbcdd927fa0da3b3ac4ddeb443e58c4df91 100644 (file)
@@ -33,6 +33,8 @@ G_BEGIN_DECLS
 GtkCssValue *   _gtk_css_shadows_value_new_none       (void);
 GtkCssValue *   _gtk_css_shadows_value_parse          (GtkCssParser             *parser);
 
+gboolean        _gtk_css_shadows_value_is_none        (const GtkCssValue        *shadows);
+
 void            _gtk_css_shadows_value_paint_layout   (const GtkCssValue        *shadows,
                                                        cairo_t                  *cr,
                                                        PangoLayout              *layout);
index 910d7b6f32ac1198a0390c968898042c9c930393..f85babab9d8503f49692b8d77cbeba341f725be2 100644 (file)
@@ -1031,12 +1031,15 @@ render_icon_image (GtkThemingEngine *engine,
                    double            width,
                    double            height)
 {
+  const GtkCssValue *shadows;
   GtkCssImage *image;
 
   image = _gtk_css_image_value_get_image (_gtk_theming_engine_peek_property (engine, GTK_CSS_PROPERTY_ICON_SOURCE));
   if (image == NULL)
     return FALSE;
 
+  shadows = _gtk_theming_engine_peek_property (engine, GTK_CSS_PROPERTY_ICON_SHADOW);
+
   cairo_translate (cr, x, y);
   cairo_translate (cr, width / 2, height / 2);
   
@@ -1044,6 +1047,14 @@ render_icon_image (GtkThemingEngine *engine,
     {
       cairo_translate (cr, -width / 2, -height / 2);
 
+      if (!_gtk_css_shadows_value_is_none (shadows))
+        {
+          cairo_push_group (cr);
+          _gtk_css_image_draw (image, cr, width, height);
+          cairo_pop_group_to_source (cr);
+          _gtk_css_shadows_value_paint_icon (shadows, cr);
+        }
+      
       _gtk_css_image_draw (image, cr, width, height);
     }